/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package net.etrs.formathlon.metier.exception;

/**
 * Exception général qui encapsulera les différentes exceptions levée dans 
 * le code métier.
 * @author OPIF
 */
public class MetierException extends Exception {

    private Type type;

    /**
     * Constructeur avec arguments.
     * @param type
     * @param source 
     */
    public MetierException(Type type, Exception source) {
        super(String.format("%s : %s", type.code, type.description), source);
        this.type = type;
    }

    /**
     * Constructeur avec argument
     * @param type 
     */
    public MetierException(Type type) {
        super(String.format("%s : %s", type.code, type.description));
        this.type = type;
    }

    /**
     * 
     * @return le type de l'excepion décrit dans l'enum.
     */
    public Type getType() {
        return type;
    }

    /*
     * Types permettant de distinguer les différentes sources d'erreur.
     */
    public static enum Type {

        
        ENTITE_NON_INCLUSE
                ("E001", "L'entité ne permet pas de retourner le niveau hiérarchique demandé"),
        USER_CANT_BE_CHEFDIV
                ("E002", "L'utilisateur ne peut être chef de division car son entité ne permet "
                        + "pas d'atteindre ne niveau hiérarichique 'division'"),
        USER_CANT_BE_CHEFCOURS
                ("E003", "L'utilisateur ne peut être chef de cours car son entité ne permet "
                        + "pas d'atteindre ne niveau hiérarichique 'cours'"),
        CANT_ACCEPT_INSCRIPTION
                ("E004", "Les droits de l'utilisateur connecté ne permettent pas d'accepter"
                        + " la demande d'inscription"),
        CANT_REFUSE_INSCRIPTION
                ("E005", "Les droits de l'utilisateur connecté ne permettent pas de refuser"
                        + " la demande d'inscription"),
        CANT_LIST_INSCRIPTIONS
                ("E006", "Les droits de l'utilisateur connecté ne permettent pas de lister"
                        + " les demandes d'inscription"),
        USER_NOT_IN_BASE
                ("E007", "L'utilisateur n'est pas référencé dans la base"),
        USER_SANS_PERSONNEL
                ("E008", "L'utilisateur n'est pas géré en tant que formateur"),
        PDF_ATTESTATION_ERREUR_TECHNIQUE
                ("E009", "Une erreur s'est produite lors de la création de l'attestation PDF"),
        PDF_EMARGEMENT_ERREUR_TECHNIQUE
                ("E010", "Une erreur s'est produite lors de la création de la feuille"
                        + "d'émargement PDF"),
        MAIL_ERREUR_TECHNIQUE
                ("E011", "Une erreur s'est produite lors de l'envoi d'un mail"),
        INSCRIPTION_ETAT_NON_VALIDE
                ("E012", "L'état de l'inscription ne permet pas de réaliser l'action demandée"),
        ARCHIVAGE_SESSION_VALIDATION_PARTICIPATION_ERREUR_TECHNIQUE
                ("E013","Une erreur s'est produite lors de la validation des participations "
                        + "d'une session ou lors de l'envoi du mail de compte rendu"),
        INSCRIPTION_YET_IN_BASE
                ("E0014", "L'inscription a déjà été faite");

        
        private String code;
        private String description;
        
        /**
         * Constructeur avec arguments.
         * @param code
         * @param description 
         */
        private Type(String code, String description) {
            this.code = code;
            this.description = description;
        }

        /**
         * 
         * @return le code de l'exception.
         */
        public String getCode() {
            return code;
        }

        /**
         * 
         * @return La description de l'exception.
         */
        public String getDescription() {
            return description;
        }
    }
}
